package main

import (
	"fmt"
	"os"
)

func main() {
	/*
		流程控制：条件、选择、跳转、循环
		条件: if else else if
		选择: switch case select（通道中使用） break continue
		跳转: for for range
		循环: goto
		fallthrough
	*/

	// 条件控制
	// if 后面的条件不需要加小括号，并且后续执行的内容中的大括号要放在同一行
	if true {
		fmt.Println("true") // true
	} else if false {
		fmt.Println("false")
	} else {
		fmt.Println("other")
	}

	// if 的另一种使用方法： comma-OK 模式
	type Html []interface{}

	html := make(Html, 5)
	html[0] = "div"
	html[1] = "span"
	html[2] = []byte("script")
	html[3] = "style"
	html[4] = "head"
	for index, element := range html {
		if value, ok := element.(string); ok {
			fmt.Printf("html[%d] is a string and its value is %s\n", index, value)
		} else if value, ok := element.([]byte); ok {
			fmt.Printf("html[%d] is a []byte and its value is %s\n", index, string(value))
		}
	}

	// 打开某一个文件不存在或者由于权限问题无法操作
	// 使用 comma-ok 来操作
	if fileHandle, err := os.Open("hello.txt"); err != nil {
		// nil 相当于 null
		fmt.Println(fileHandle) // <nil>
	} else {
		fmt.Println("success")
	}
}
